package pl.edu.agh.admin.api;

import java.util.Calendar;
import java.util.List;
import java.util.Map;

public interface Task {
	
	/**
	 * Metoda s�u�y do pobierania parametr�w pliku cron'a w kt�rym znajdowa� si� task czyli
	 * np. jakiego shella u�ywa�, komu wysy�a� maile z powiadomieniem itp.
	 * parametry s� ustawion dla ca�ego pliku => dla wszystkich task�w danego usera
	 * @return mapa odwzorowuje parametr = warto�� wprost tak jak w pliku cron np. (SHELL = /bin/sh ) 
	 */
	public Map<CronParameter, String> getParameters();
	
	/**
	 * metoda do pobierania komendy do wykonania w tym tasku
	 * np jak mamy wpis w crontabie:   01 04 1 1 1 /usr/bin/somedirectory/somecommand param1 param2 to zwraca tylko: /usr/bin/somedirectory/somecommand
	 * @return komenda ze �cie�k�  
	 */
	public String getCommand();
	
	/**
	 * metoda do pobierania czystego crona
	 * np jak mamy wpis w crontabie:   01 04 1 1 1 /usr/bin/somedirectory/somecommand param1 param2 to zwraca: 01 04 1 1 1
	 * @return cron w postaci stringa
	 */
	public String getPlainCron();
	
	/**
	 * metoda do pobierania wszystkich moemnt�w uruchomienia tego taska.
	 * @param data do kiedy poniewa� nie mo�emy zwr�ci� pe�nej listy - by�aby niesko�czona
	 * @return lista w postaci klas Calendar, gdzie ka�dy element listy reprezentuje nast�pny moment uruchomienia
	 */
	public List<Calendar> getAllMomentsOfExecution(Calendar until);
	
	/**
	 * metoda do pobierania u�ytkownika w�a�ciciela danego taska
	 * @return 
	 */
	public User getUser();
	
	public int getNumberOfExecutions(Calendar until);
	
	public Calendar getNextTimeOfExecution();
	
	
	//01 04 1 1 1 
	public String getCron();
}
